C#でSQLiteを使う業務アプリでは、DataGridViewに一覧表示したいという需要が非常に多いです。 この記事では、SQLite → DataTable → DataGridView の流れを最速で構築し、 さらに編集・削除まで対応する実務レベルのコードをまとめています。
この記事でわかること
・SQLiteのデータをDataGridViewに表示する方法
・DataTableを使った一覧表示の最速コード
・編集内容をSQLiteに反映する方法
・削除ボタン付きのDataGridViewを作る方法
・業務アプリでのベストプラクティス
・SQLiteのデータをDataGridViewに表示する方法
・DataTableを使った一覧表示の最速コード
・編集内容をSQLiteに反映する方法
・削除ボタン付きのDataGridViewを作る方法
・業務アプリでのベストプラクティス
1. 必要なNuGetパッケージ
- Microsoft.Data.Sqlite
- SQLitePCLRaw.bundle_e_sqlite3
この2つだけでOK。
2. SQLite → DataTable → DataGridView の最速コード
まずは一覧表示の基本コード。
using Microsoft.Data.Sqlite;
using System.Data;
var dt = new DataTable();
var cs = "Data Source=sample.db";
using var con = new SqliteConnection(cs);
con.Open();
using var cmd = new SqliteCommand("SELECT * FROM Users", con);
using var reader = cmd.ExecuteReader();
dt.Load(reader);
// DataGridViewに表示
dataGridView1.DataSource = dt;
ポイント
- DataTable.Load(reader) で一発読み込み
- DataGridView.DataSource にそのまま渡せる
- WinForms業務アプリの定番パターン
3. DataGridViewに「削除ボタン」を追加する
削除ボタン列を追加するコード。
var deleteButton = new DataGridViewButtonColumn();
deleteButton.HeaderText = "削除";
deleteButton.Text = "削除";
deleteButton.UseColumnTextForButtonValue = true;
dataGridView1.Columns.Add(deleteButton);
4. 削除ボタンが押されたときの処理
CellContentClick イベントで削除処理を行う。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// 削除ボタン列か確認
if (dataGridView1.Columns[e.ColumnIndex].HeaderText == "削除")
{
int id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Id"].Value);
var cs = "Data Source=sample.db";
using var con = new SqliteConnection(cs);
con.Open();
var sql = "DELETE FROM Users WHERE Id = @id";
using var cmd = new SqliteCommand(sql, con);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
// 再読み込み
LoadData();
}
}
5. DataGridViewの編集内容をSQLiteに反映する
CellEndEdit イベントで更新処理を行う。
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
var row = dataGridView1.Rows[e.RowIndex];
int id = Convert.ToInt32(row.Cells["Id"].Value);
string name = row.Cells["Name"].Value.ToString();
int age = Convert.ToInt32(row.Cells["Age"].Value);
var cs = "Data Source=sample.db";
using var con = new SqliteConnection(cs);
con.Open();
var sql = "UPDATE Users SET Name = @name, Age = @age WHERE Id = @id";
using var cmd = new SqliteCommand(sql, con);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@age", age);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
ポイント
- DataGridViewの編集をそのままDBに反映できる
- 業務アプリでよく使うパターン
6. 一覧を再読み込みするメソッド(LoadData)
削除後・更新後に呼び出す。
private void LoadData()
{
var dt = new DataTable();
var cs = "Data Source=sample.db";
using var con = new SqliteConnection(cs);
con.Open();
using var cmd = new SqliteCommand("SELECT * FROM Users", con);
using var reader = cmd.ExecuteReader();
dt.Load(reader);
dataGridView1.DataSource = dt;
}
7. 業務アプリでのベストプラクティス
- DataTableは一覧表示に最適
- 編集 → UPDATE、削除 → DELETE をイベントで処理
- 大量データは LIMIT / OFFSET を使う
- DBファイルは Program Files に置かない(権限問題)
- バックアップはファイルコピーでOK(SQLiteの強み)
まとめ:SQLite × DataGridView は業務アプリ最強の組み合わせ
- DataTable.Load(reader) で高速に一覧表示
- 削除ボタンで簡単にレコード削除
- CellEndEdit で編集内容を即DB反映
- WinForms業務アプリと相性抜群
C#で業務アプリを作るなら、 SQLite × DataGridView は最も実用的でコスパの良い組み合わせです。 この記事をベースに、あなたのアプリに組み込んでみてください。